package com.yuchting.dinneronline.client.common;

import com.google.gwt.json.client.JSONArray;
import com.google.gwt.json.client.JSONBoolean;
import com.google.gwt.json.client.JSONNumber;
import com.google.gwt.json.client.JSONObject;
import com.google.gwt.json.client.JSONParser;
import com.google.gwt.json.client.JSONString;
import com.google.gwt.json.client.JSONValue;

public class YuchJSONObject{
	
	public  JSONObject m_json;
	public  JSONArray m_jsonArray;
	
	public  YuchJSONObject(String _json)throws Exception{
		m_json = JSONParser.parseLenient(_json).isObject();
		if(m_json == null){
			m_jsonArray = (JSONArray)JSONParser.parseLenient(_json).isArray();
		}
	}
	
	public YuchJSONObject(){
		m_json = new JSONObject();
	}
	
	public YuchJSONObject(JSONObject _obj){
		m_json = _obj;
	}
	
	public JSONValue put(String _key,String _string)throws Exception{
		return m_json.put(_key,new JSONString(_string));
	}
	
	public JSONValue put(String _key,double _value)throws Exception{
		return m_json.put(_key,new JSONNumber(_value));
	}
	
	public JSONValue put(String _key,float _value)throws Exception{
		return m_json.put(_key,new JSONNumber(_value));
	}
	
	public JSONValue put(String _key,int _value)throws Exception{
		return m_json.put(_key,new JSONNumber(_value));
	}
	public JSONValue put(String _key,boolean _value)throws Exception{
		return m_json.put(_key,JSONBoolean.getInstance(_value));
	}
	
	public JSONArray put(String _key,byte[] _value)throws Exception{
		if(_value == null){
			throw new IllegalArgumentException("_value == null");
		}
		
		JSONArray t_array = new JSONArray();
		for(int i = 0;i < _value.length;i++){
			t_array.set(i,new JSONNumber((int)_value[i]));
		}
		
		m_json.put(_key,t_array);
		
		return t_array; 
	}
	
	public JSONArray put(String _key,long[] _value)throws Exception{
		if(_value == null){
			throw new IllegalArgumentException("_value == null");
		}
		
		JSONArray t_array = new JSONArray();
		for(int i = 0;i < _value.length;i++){
			t_array.set(i,new JSONNumber(_value[i]));
		}
		
		m_json.put(_key,t_array);
		
		return t_array; 
	}
	
	public String getString(String _key)throws Exception{
		JSONString t_ret = m_json.get(_key).isString();
		if(t_ret != null){
			return t_ret.stringValue();
		}
		
		return "";
	}
	
	public int getInt(String _key)throws Exception{
		JSONNumber t_ret = m_json.get(_key).isNumber();
		if(t_ret != null){
			return (int)t_ret.doubleValue();
		}
		
		return 0;
	}
	
	public float getFloat(String _key)throws Exception{
		JSONNumber t_ret = m_json.get(_key).isNumber();
		if(t_ret != null){
			return (float)t_ret.doubleValue();
		}
		
		return 0;
	}
	
	public double getDouble(String _key)throws Exception{
		JSONNumber t_ret = m_json.get(_key).isNumber();
		if(t_ret != null){
			return (double)t_ret.doubleValue();
		}
		
		return 0;
	}
	
	public long getLong(String _key)throws Exception{
		JSONNumber t_ret = m_json.get(_key).isNumber();
		if(t_ret != null){
			return (long)t_ret.doubleValue();
		}
		
		return 0;
	}
	
	public boolean getBoolean(String _key)throws Exception{
		JSONBoolean t_ret = m_json.get(_key).isBoolean();
		if(t_ret != null){
			return t_ret.booleanValue();
		}
		
		return false;
	}
	
	public byte[] getByteArray(String _key)throws Exception{
		JSONArray t_arr = m_json.get(_key).isArray();
		int num = t_arr.size();
		byte[] t_ret = new byte[num];
		for(int i = 0;i < num;i++){
			t_ret[i] = (byte)t_arr.get(i).isNumber().doubleValue();
		}
		
		return t_ret;
	}
	
	public long[] getLongArray(String _key)throws Exception{
		JSONArray t_arr = m_json.get(_key).isArray();
		int num = t_arr.size();
		long[] t_ret = new long[num];
		for(int i = 0;i < num;i++){
			t_ret[i] = (long)t_arr.get(i).isNumber().doubleValue();
		}
		
		return t_ret;
	}
	
}
